/* jquery datagrid 扩展 */
$.extend($.fn.datagrid.methods, {
	/* 增加toolbar元素 */
	/* $('#tt').datagrid("addToolbarItem",[{"text":"xxx"},"-",{"text":"xxxsss","iconCls":"icon-ok"}]) */
	addToolbarItem : function(jq, items) {
		return jq.each(function() {
			var toolbar = $(this).parent().prev("div.datagrid-toolbar");
			for ( var i = 0; i < items.length; i++) {
				var item = items[i];
				if (item === "-") {
					toolbar.append('<div class="datagrid-btn-separator"></div>');
				} else {
					var btn = $("<a href=\"javascript:void(0)\"></a>");
					btn[0].onclick = eval(item.handler || function() {
					});
					btn.css("float", "left").appendTo(toolbar).linkbutton($.extend({}, item, {
						plain : true
					}));
				}
			}
			toolbar = null;
		});
	},
	/* 移除toolbar元素 */
	/* $('#tt').datagrid("removeToolbarItem","GetChanges")根据btn的text删除 */
	/* $('#tt').datagrid("removeToolbarItem",0)根据下标删除 */
	removeToolbarItem : function(jq, param) {
		return jq.each(function() {
			var btns = $(this).parent().prev("div.datagrid-toolbar").children("a");
			var cbtn = null;
			if (typeof param == "number") {
				cbtn = btns.eq(param);
			} else if (typeof param == "string") {
				var text = null;
				btns.each(function() {
					text = $(this).data().linkbutton.options.text;
					if (text == param) {
						cbtn = $(this);
						text = null;
						return;
					}
				});
			}
			if (cbtn) {
				var prev = cbtn.prev()[0];
				var next = cbtn.next()[0];
				if (prev && next && prev.nodeName == "DIV" && prev.nodeName == next.nodeName) {
					$(prev).remove();
				} else if (next && next.nodeName == "DIV") {
					$(next).remove();
				} else if (prev && prev.nodeName == "DIV") {
					$(prev).remove();
				}
				cbtn.remove();
				cbtn = null;
			}
		});
	}
});
/*
 * jquery ValidateBox Validate Rule 扩展
 */
$.extend($.fn.validatebox.defaults.rules, {
	/*
	 * 远程调用，可以传递多个表单参数
	 * 
	 * myremote[param0,param1,param2,param3]
	 * 
	 * param0:url
	 * 
	 * param1:直接应用此校验规则的dom对象id
	 * 
	 * param2:需要传递到后台的其它dom对象id，多个以逗号分割
	 * 
	 * param3:invalidMessage
	 * 
	 * 后台除了可以获取到指定dom对象的参数值外，还可以获取到默认的参数_CURRENTVALUE(直接应用规则的dom元素的值)。
	 * 
	 * Return: Plain TEXT [true|false],JSON RESULT[result=true|false,invalidMessage=?]
	 */
	myremote : {
		validator : function(value, param) {
			/* 附加参数(需要传递到后台的表单对象id，多个以逗号分割) */
			var ids = param[2].toUpperCase().split(",");
			var params = {};
			var val = '';
			var fieldType;/* datebox,datetimebox,combotree,combotree-multiple,radio,checkbox,combobox,combobox-multiple,text */
			/* var msgs = ''; */
			for ( var i = 0; i < ids.length; i++) {
				/* 根据字段类型获取字段值 */
				fieldType = fieldsType.get(ids[i]);
				if (fieldType != undefined) {
					val = '';
					if (fieldType == 'datebox') {
						val = $('#' + ids[i]).datebox('getValue');
					} else if (fieldType == 'datetimebox') {
						val = $('#' + ids[i]).datetimebox('getValue');
					} else if (fieldType == 'combotree') {
						val = $('#' + ids[i]).combotree('getValue');
					} else if (fieldType == 'combotree-multiple') {
						val = $('#' + ids[i]).combotree('getValues').join(",");
					} else if (fieldType == 'radio') {
						val = $(":radio[name='" + ids[i] + "']:checked").val();
					} else if (fieldType == 'checkbox') {
						$(":checkbox[name='" + ids[i] + "']:checked").each(function() {
							if ($(this).val().trim() != '') {
								val += $(this).val().trim() + ",";
							}
						});
						if (val != '') {
							val = val.substring(0, val.length - 1);
						}
					} else if (fieldType == 'combobox') {
						val = $('#' + ids[i]).combobox('getValue');
					} else if (fieldType == 'combobox-multiple') {
						val = $('#' + ids[i]).combobox('getValues').join(",");
					} else if (fieldType == 'text') {
						val = $('#' + ids[i]).val();
					}

					if (val == undefined || val == null) {
						val = '';
					}
					/* msgs += ids[i] + ' type:' + fieldType + ' val:' + val + '<br/>'; */
					params[ids[i]] = val;
				}
			}
			/* top.showMsg('', msgs, false); */
			params['_CURRENTVALUE'] = value;
			var data = $.ajax({
				url : param[0],
				dataType : "json",
				data : params,
				async : false,
				cache : false,
				type : "post"
			}).responseText;
			/* plain string */
			if (data == 'true') {
				return true;
			} else if (data == 'false') {
				$('#' + param[1]).validatebox({
					invalidMessage : (param[3] != undefined && param[3] != '') ? param[3] : '值不正确！'
				});
				return false;
			}
			/* json object */
			try {
				data = eval('(' + data + ')');
				if (data.result == 'true') {
					return true;
				} else {
					$('#' + param[1]).validatebox({
						invalidMessage : (data.invalidMessage != undefined && data.invalidMessage != '') ? data.invalidMessage : (param[3] != undefined && param[3] != '') ? param[3] : '值不正确！'
					});
					return false;
				}
			} catch (e) {
				$('#' + param[1]).validatebox({
					invalidMessage : '自定义的校验规则返回内容不正确！'
				});
				return false;
			}
		},
		message : ''
	}
});